import { useMemberStore } from "@/store/member";

const baseURL='https://pcapi-xiaotuxian-front-devtest.itheima.net'

uni.addInterceptor('request',{
  invoke(args){
    console.log('args是:',args);
    // 没有以https开头的地址,添加基地址
    if(!(args.url as string).startsWith('https') ){
      args.url=baseURL+args.url
    }
    // 为接口统一添加authorization请求头
    args.header=args.header||{}
    // 在非vue文件中,哪里使用store就在哪里调用
    const memberStore=useMemberStore()
    const token = memberStore.profile.token
    // 如果有token就添加到请求头中
    if(token){
      args.header.authorization=token
    }
  }
})
uni.addInterceptor('uploadFile',{
  invoke(args){
    console.log('args是:',args);
    // 没有以https开头的地址,添加基地址
    if(!(args.url as string).startsWith('https') ){
      args.url=baseURL+args.url
    }
    // 为接口统一添加authorization请求头
    args.header=args.header||{}
    // 在非vue文件中,哪里使用store就在哪里调用
    const memberStore=useMemberStore()
    const token = memberStore.profile.token
    // 如果有token就添加到请求头中
    if(token){
      args.header.authorization=token
    }
  }
})


type Data<T>={
  code:string
  msg:string
  result:T
}

// 封装http函数,返回一个promise对象
// 每次调用的接口返回值不一致,所以传进参数T
// 定义res.data的类型Data<T>

// const http=<T>(options:UniApp.RequestOptions)=>{
// return new Promise<Data<T>((resolve,reject)=>{
//   uni.request({
//     ...options,
//     success:res=>{
//       resolve(res.data as Data<T>)
//     }
//   })
// })
// }
const http = <T>(options: UniApp.RequestOptions) => {
  return new Promise<T>((resolve, reject) => {
    uni.request({
      // options 里面包含：url method data
      ...options,
      // 请求成功
      success(res) {
        if (res.statusCode === 200) {
					// 请求成功
          resolve((res.data as Data<T>).result)
        } else {
					// 请求失败
          // 统一错误提示
          uni.showToast({
            icon: 'none',
            title: (res.data as Data<T>).msg
          })
          // 使用 reject 抛出错误
          reject(res)
        }
      }
    })
  })
}
export default http